<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">




<title>Spring.NET学习笔记12——面向切面编程(基础篇) Level 300 - 刘冬的备忘录 - 博客园</title>
<meta name="keywords" content="Spring.NET,AOP,面向切面编程">



<link title="RSS" type="application/rss+xml" rel="alternate" href="http://www.cnblogs.com/GoodHelper/rss">
<link title="RSD" type="application/rsd+xml" rel="EditURI" href="http://www.cnblogs.com/GoodHelper/rsd.xml"> 
  



<link rel="stylesheet" type="text/css" href="index.css" media="all">
</head>
<body><div style="border: 1px solid rgb(126, 152, 214); margin: 0px; padding: 1px; position: absolute; background-color: rgb(231, 247, 247); font-size: 14px; left: 3px; top: 3px; width: 138px; height: 22px; text-align: center; z-index: 99; display: none;" id="_dict_status"></div><div style="margin: 0px; padding: 0px; position: absolute; display: none; width: 240px; z-index: 98; background-color: rgb(255, 255, 255);" id="_dict_layer"><table style="border: 1px solid rgb(126, 152, 214);" border="0" cellpadding="0" cellspacing="0" width="240"><tbody><tr><td style="border: medium none ; margin: 0px; padding: 0px;" width="100%"><div style="border: medium none ; margin: 0px; padding: 0px; width: 240px; height: 20px; cursor: move; background-color: rgb(200, 218, 243); display: inline;"><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td style="border: medium none ; margin: 0px; padding: 0pt 3px; background-color: rgb(200, 218, 243); color: rgb(26, 145, 0); font-size: 14px; line-height: 20px; font-weight: normal; font-family: Verdana,Geneva,Arial,Helvetica,sans-serif;" id="_dict_title" name="_dict_title" align="left" height="20" width="60%">划词翻译 - Dict.CN</td><td style="border: medium none ; margin: 0px; padding: 0pt 3px; background-color: rgb(200, 218, 243); line-height: 20px; font-weight: normal; font-family: Verdana,Geneva,Arial,Helvetica,sans-serif;" align="right" height="20" valign="middle"><a href="http://dict.cn/scb/" target="_top" title="生词本" style="border: medium none ; margin: 0px; padding: 0px; font-weight: normal; font-family: Verdana,Geneva,Arial,Helvetica,sans-serif;" id="_dict_add" name="_dict_add"><img src="add.gif" style="border: medium none ; margin: 0px; padding: 0px; display: inline;" align="absmiddle" border="0"></a> <a href="http://dict.cn/" target="_top" title="详细解释" style="border: medium none ; margin: 0px; padding: 0px; font-weight: normal; font-family: Verdana,Geneva,Arial,Helvetica,sans-serif;" id="_dict_detail" name="_dict_detail"><img src="detail.gif" style="border: medium none ; margin: 0px; padding: 0px; display: inline;" align="absmiddle" border="0"></a> <a href="http://dict.cn/foot/help.htm" target="_top" title="帮助" style="border: medium none ; margin: 0px; padding: 0px; font-weight: normal; font-family: Verdana,Geneva,Arial,Helvetica,sans-serif;"><img src="help.gif" style="border: medium none ; margin: 0px; padding: 0px; display: inline;" align="absmiddle" border="0"></a> <a href="javascript:_dictClose()" title="关闭" target="_self" style="border: medium none ; margin: 0px; padding: 0px; font-weight: normal; font-family: Verdana,Geneva,Arial,Helvetica,sans-serif;"><img src="close.gif" style="border: medium none ; margin: 0px; padding: 0px; display: inline;" align="absmiddle" border="0"></a></td></tr></tbody></table></div><table style="border: medium none ; margin: 0px; padding: 0px;" align="center" border="0" cellpadding="3" cellspacing="4" width="100%"><tbody><tr><td style="border: medium none ; margin: 0px; padding: 0px;"><fieldset color="#00c0ff" style="margin: 0px; padding: 0pt 2px; font-weight: normal; font-family: Verdana,Geneva,Arial,Helvetica,sans-serif;"><legend align="center" style="margin: 0px; padding: 0px;"><a href="http://dict.cn/" target="_top" style="border: medium none ; margin: 0px; padding: 0px;"><img src="qdict.gif" border="0" height="53" width="126"></a></legend><table style="border: medium none ; margin: 0px; padding: 0px;" align="center" border="0" cellpadding="0" cellspacing="0"><tbody><tr><td style="border: medium none ; margin: 0px; padding: 0px;" id="_dictContent" name="_dictContent" height="120" width="100%"><iframe id="_dictFrame" name="_dictFrame" src="index_1.html" frameborder="0" height="120" width="100%"></iframe></td></tr><tr align="center"><td style="border: medium none ; margin: 0px; padding: 0px; color: rgb(153, 153, 153); font-size: 10px; line-height: 18px; font-weight: normal; font-family: Verdana,Geneva,Arial,Helvetica,sans-serif;" height="18" valign="bottom" width="100%">©2003-2008 <a href="http://dict.cn/" target="_top" style="border: medium none ; margin: 0px; padding: 0px; color: rgb(46, 168, 237); font-size: 10px; line-height: 18px; text-decoration: none; font-weight: normal; font-family: Verdana,Geneva,Arial,Helvetica,sans-serif;">Dict.CN</a> <a href="http://dict.cn/" target="_top" style="border: medium none ; margin: 0px; padding: 0px; color: rgb(153, 153, 153); font-size: 10px; line-height: 18px; text-decoration: none; font-weight: normal; font-family: Verdana,Geneva,Arial,Helvetica,sans-serif;">海词</a></td></tr></tbody></table></fieldset></td></tr></tbody></table></td></tr></tbody></table></div>
    <form name="Form1" method="post" action="http://www.cnblogs.com/goodhelper/archive/2009/11/12/springnet_aop.html" id="Form1">
<div>
<input name="__EVENTTARGET" id="__EVENTTARGET" value="" type="hidden">
<input name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" type="hidden">
<input name="__VIEWSTATE" id="__VIEWSTATE" value="" type="hidden">
</div>




        
<!--done-->
<div id="home">
<div id="header">
	<div id="blogTitle">
	<a id="lnkBlogLogo" href="http://www.cnblogs.com/GoodHelper/"><img id="blogLogo" src="logo.gif" alt="返回主页"></a>			
		
<!--done-->
<h1><a id="Header1_HeaderTitle" class="headermaintitle" href="http://www.cnblogs.com/GoodHelper/">刘冬的备忘录</a></h1>
<h2>打造新疆第一敏捷团队</h2>



		
	</div><!--end: blogTitle 博客的标题和副标题 -->
	<div id="navigator">
		
<!--done-->
			<ul id="navList">
				<li><a id="MyLinks1_HomeLink" class="menu" href="http://www.cnblogs.com/">博客园</a></li>
				<li><a id="MyLinks1_SpaceLink" class="menu" href="http://space.cnblogs.com/">社区</a></li>
				<li><a id="MyLinks1_MyHomeLink" class="menu" href="http://www.cnblogs.com/GoodHelper/">首页</a></li>
				<li><a id="MyLinks1_NewPostLink" class="menu" href="http://www.cnblogs.com/GoodHelper/admin/EditPosts.aspx?opt=1">新随笔</a></li>
				<li><a id="MyLinks1_ContactLink" accesskey="9" class="menu" href="http://space.cnblogs.com/msg/send/%e5%88%98%e5%86%ac.NET">联系</a></li>
				<li><a id="MyLinks1_Admin" class="menu" href="http://www.cnblogs.com/GoodHelper/admin/EditPosts.aspx">管理</a></li>
				<li><a id="MyLinks1_Syndication" class="menu" href="http://www.cnblogs.com/GoodHelper/rss">订阅</a>
				<a id="MyLinks1_XMLLink" class="aHeaderXML" href="http://www.cnblogs.com/GoodHelper/rss"><img src="rss.gif" alt="订阅" style="border-width: 0px;"></a></li>
			</ul>


		<div class="blogStats">
			
			
<!--done-->
随笔- 32&nbsp;
文章- 2&nbsp;
评论- 226&nbsp;

			
		</div><!--end: blogStats -->
	</div><!--end: navigator 博客导航栏 -->
</div><!--end: header 头部 -->

<div id="main">
	<div id="mainContent">
	<div class="forFlow">
		
					
<!--done-->
<div id="topics">
	<div class="post">
		<h1 class="postTitle">
			<a id="ctl04_TitleUrl" class="postTitle2" href="http://www.cnblogs.com/GoodHelper/archive/2009/11/12/SpringNet_Aop.html">Spring.NET学习笔记12——面向切面编程(基础篇) Level 300</a>
		</h1>
		<div class="clear"></div>
		<div class="postBody">
			<p>　　<strong><a href="http://www.cnblogs.com/GoodHelper/tag/AOP/" target="_top"><strong>AOP</strong></a></strong>即<strong>面向切面编程</strong>(Aspect Oriented Programming的缩写)，是<strong>OOP</strong>(面向对象编程)的一种延续形式。是通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术，它从一个不同于<strong>OOP</strong>的角度来看待程序的结构：<strong>OOP</strong>将应用程序分解为一系列表现为继承关系的对象；<strong><a href="http://www.cnblogs.com/GoodHelper/tag/AOP/" target="_top"><strong>AOP</strong></a> </strong>则把程序分解为一系列方面（<strong>aspects</strong>）或者关注点（<strong>concerns</strong>）。<strong><a href="http://www.cnblogs.com/GoodHelper/tag/AOP/" target="_top"><strong>AOP</strong></a></strong>将诸如事务管理等本来横向分布在多个对象中的关注点进行了模块化处理（这些关注点也常称为横切（<strong>crosscutting</strong>）关注点）。在<a href="http://www.cnblogs.com/GoodHelper/tag/Spring.NET/" target="_top">Spring.NET</a>中提供了面向切面编程的丰富支持，允许通过分离应用的业务逻辑与系统级服务（例如审计（<strong>auditing</strong>）和事务（<strong>transaction</strong>）管理）进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责（甚至是意识）其它的系统级关注点，例如日志或事务支持。</p>
<p>　　下面我举个例子来说明这一切：</p>
<p>　　场景：业务类<span style="color: rgb(51, 102, 255);">CompanyManager</span>在调用Save方法的时候需要调用<span style="color: rgb(51, 102, 255);">SecurityManager</span>类判断权限是否足够(图1)。</p>
<p><img alt="" src="2009-11-12.1.gif" border="0" height="359" width="356">图1</p>
<p>&nbsp;</p>
<p>　　准备条件：</p>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" src="none.gif" align="top"><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;CompanyDao<br><img id="Codehighlighter1_32_125_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_32_125_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_32_125_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_32_125_Closed_Text').style.display='inline';" src="expandedblockstart.gif" align="top"><img id="Codehighlighter1_32_125_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_32_125_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_32_125_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_32_125_Open_Text').style.display='inline';" src="contractedblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_32_125_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img alt="" src="dot.gif"></span><span id="Codehighlighter1_32_125_Open_Text"><span style="color: rgb(0, 0, 0);">{<br><img alt="" src="inblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;Save()<br><img id="Codehighlighter1_69_119_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_69_119_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_69_119_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_69_119_Closed_Text').style.display='inline';" src="expandedsubblockstart.gif" align="top"><img id="Codehighlighter1_69_119_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_69_119_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_69_119_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_69_119_Open_Text').style.display='inline';" src="contractedsubblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_69_119_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img alt="" src="dot.gif"></span><span id="Codehighlighter1_69_119_Open_Text"><span style="color: rgb(0, 0, 0);">{<br><img alt="" src="inblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">保存数据</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br><img alt="" src="expandedsubblockend.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);"><br><img alt="" src="expandedblockend.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
<p>&nbsp;</p>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" src="none.gif" align="top"><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">interface</span><span style="color: rgb(0, 0, 0);">&nbsp;ICompanyManager<br><img id="Codehighlighter1_41_108_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_41_108_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_41_108_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_41_108_Closed_Text').style.display='inline';" src="expandedblockstart.gif" align="top"><img id="Codehighlighter1_41_108_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_41_108_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_41_108_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_41_108_Open_Text').style.display='inline';" src="contractedblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_41_108_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img alt="" src="dot.gif"></span><span id="Codehighlighter1_41_108_Open_Text"><span style="color: rgb(0, 0, 0);">{<br><img id="Codehighlighter1_67_80_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_67_80_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_67_80_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_67_80_Closed_Text').style.display='inline';" src="expandedsubblockstart.gif" align="top"><img id="Codehighlighter1_67_80_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_67_80_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_67_80_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_67_80_Open_Text').style.display='inline';" src="contractedsubblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">string</span><span style="color: rgb(0, 0, 0);">&nbsp;UserName&nbsp;</span><span id="Codehighlighter1_67_80_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img alt="" src="dot.gif"></span><span id="Codehighlighter1_67_80_Open_Text"><span style="color: rgb(0, 0, 0);">{&nbsp;</span><span style="color: rgb(0, 0, 255);">get</span><span style="color: rgb(0, 0, 0);">;&nbsp;</span><span style="color: rgb(0, 0, 255);">set</span><span style="color: rgb(0, 0, 0);">;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);"><br><img alt="" src="inblock.gif" align="top"><br><img alt="" src="inblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;Save();<br><img alt="" src="expandedblockend.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
<p>&nbsp;</p>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" src="none.gif" align="top"><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">interface</span><span style="color: rgb(0, 0, 0);">&nbsp;ISecurityManager<br><img id="Codehighlighter1_42_87_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_42_87_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_42_87_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_42_87_Closed_Text').style.display='inline';" src="expandedblockstart.gif" align="top"><img id="Codehighlighter1_42_87_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_42_87_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_42_87_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_42_87_Open_Text').style.display='inline';" src="contractedblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_42_87_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img alt="" src="dot.gif"></span><span id="Codehighlighter1_42_87_Open_Text"><span style="color: rgb(0, 0, 0);">{<br><img alt="" src="inblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">bool</span><span style="color: rgb(0, 0, 0);">&nbsp;IsPass(</span><span style="color: rgb(0, 0, 255);">string</span><span style="color: rgb(0, 0, 0);">&nbsp;userName);<br><img alt="" src="expandedblockend.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
<p>&nbsp;</p>
<div class="cnblogs_code"><img style="display: none;" id="Code_Closed_Image_034646" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_034646').style.display='none'; document.getElementById('Code_Open_Image_034646').style.display='inline'; document.getElementById('Code_Open_Text_034646').style.display='inline';" src="contractedblock.gif" align="top" height="16" width="11"><img id="Code_Open_Image_034646" style="display: inline;" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_034646').style.display='none'; getElementById('Code_Closed_Image_034646').style.display='inline'; getElementById('Code_Closed_Text_034646').style.display='inline';" src="expandedblockstart.gif" align="top" height="16" width="11"><span style="display: none;" class="cnblogs_code_Collapse" id="Code_Closed_Text_034646">SecurityManager </span><span id="Code_Open_Text_034646" style="display: inline;"><br><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" src="none.gif" align="top"><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;SecurityManager&nbsp;:&nbsp;ISecurityManager<br><img id="Codehighlighter1_56_305_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_56_305_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_56_305_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_56_305_Closed_Text').style.display='inline';" src="expandedblockstart.gif" align="top"><img id="Codehighlighter1_56_305_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_56_305_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_56_305_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_56_305_Open_Text').style.display='inline';" src="contractedblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_56_305_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img alt="" src="dot.gif"></span><span id="Codehighlighter1_56_305_Open_Text"><span style="color: rgb(0, 0, 0);">{<br><img id="Codehighlighter1_66_196_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_66_196_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_66_196_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_66_196_Closed_Text').style.display='inline';" src="expandedsubblockstart.gif" align="top"><img id="Codehighlighter1_66_196_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_66_196_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_66_196_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_66_196_Open_Text').style.display='inline';" src="contractedsubblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_66_196_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">/**/</span><span id="Codehighlighter1_66_196_Open_Text"><span style="color: rgb(128, 128, 128);">///</span><span style="color: rgb(0, 128, 0);">&nbsp;</span><span style="color: rgb(128, 128, 128);">&lt;summary&gt;</span><span style="color: rgb(0, 128, 0);"><br><img alt="" src="inblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(128, 128, 128);">///</span><span style="color: rgb(0, 128, 0);">&nbsp;判断权限<br><img alt="" src="inblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(128, 128, 128);">///</span><span style="color: rgb(0, 128, 0);">&nbsp;</span><span style="color: rgb(128, 128, 128);">&lt;/summary&gt;</span><span style="color: rgb(0, 128, 0);"><br><img alt="" src="inblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(128, 128, 128);">///</span><span style="color: rgb(0, 128, 0);">&nbsp;</span><span style="color: rgb(128, 128, 128);">&lt;param&nbsp;name="userName"&gt;&lt;/param&gt;</span><span style="color: rgb(0, 128, 0);"><br><img alt="" src="expandedsubblockend.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(128, 128, 128);">///</span><span style="color: rgb(0, 128, 0);">&nbsp;</span><span style="color: rgb(128, 128, 128);">&lt;returns&gt;&lt;/returns&gt;</span><span style="color: rgb(128, 128, 128);"></span></span><br><img alt="" src="inblock.gif" align="top"><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">bool</span><span style="color: rgb(0, 0, 0);">&nbsp;IsPass(</span><span style="color: rgb(0, 0, 255);">string</span><span style="color: rgb(0, 0, 0);">&nbsp;userName)<br><img id="Codehighlighter1_248_299_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_248_299_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_248_299_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_248_299_Closed_Text').style.display='inline';" src="expandedsubblockstart.gif" align="top"><img id="Codehighlighter1_248_299_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_248_299_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_248_299_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_248_299_Open_Text').style.display='inline';" src="contractedsubblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_248_299_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img alt="" src="dot.gif"></span><span id="Codehighlighter1_248_299_Open_Text"><span style="color: rgb(0, 0, 0);">{<br><img alt="" src="inblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;userName&nbsp;</span><span style="color: rgb(0, 0, 0);">==</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">admin</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br><img alt="" src="expandedsubblockend.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);"><br><img alt="" src="expandedblockend.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></span></div>
<p>&nbsp;</p>
<p>　　第一种实现方式，我们通常会这样做：直接在<span style="color: rgb(51, 102, 255);">CompanyManager</span>类中调用<span style="color: rgb(51, 102, 255);">ISecurityManager</span>接口的IsPass方法判断权限。</p>
<p>&nbsp;</p>
<div class="cnblogs_code"><img style="display: none;" id="Code_Closed_Image_035044" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_035044').style.display='none'; document.getElementById('Code_Open_Image_035044').style.display='inline'; document.getElementById('Code_Open_Text_035044').style.display='inline';" src="contractedblock.gif" align="top" height="16" width="11"><img id="Code_Open_Image_035044" style="display: inline;" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_035044').style.display='none'; getElementById('Code_Closed_Image_035044').style.display='inline'; getElementById('Code_Closed_Text_035044').style.display='inline';" src="expandedblockstart.gif" align="top" height="16" width="11"><span style="display: none;" class="cnblogs_code_Collapse" id="Code_Closed_Text_035044">SimpleCompanyManager </span><span id="Code_Open_Text_035044" style="display: inline;"><br><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" src="none.gif" align="top"><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;SimpleCompanyManager&nbsp;:&nbsp;ICompanyManager<br><img id="Codehighlighter1_56_628_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_56_628_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_56_628_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_56_628_Closed_Text').style.display='inline';" src="expandedblockstart.gif" align="top"><img id="Codehighlighter1_56_628_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_56_628_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_56_628_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_56_628_Open_Text').style.display='inline';" src="contractedblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_56_628_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img alt="" src="dot.gif"></span><span id="Codehighlighter1_56_628_Open_Text"><span style="color: rgb(0, 0, 0);">{<br><img id="Codehighlighter1_66_195_Closed_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_66_195_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_66_195_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_66_195_Open_Text').style.display='inline';" src="contractedsubblock.gif" align="top"><img id="Codehighlighter1_66_195_Open_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_66_195_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_66_195_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_66_195_Closed_Text').style.display='inline';" src="expandedsubblockstart.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_66_195_Closed_Text" style="border: 1px solid rgb(128, 128, 128); background-color: rgb(255, 255, 255);">可通过外部注入的属性</span><span id="Codehighlighter1_66_195_Open_Text" style="display: none;"><span style="color: rgb(0, 0, 255);">#region</span><span style="color: rgb(0, 0, 0);">&nbsp;可通过外部注入的属性</span><span style="color: rgb(0, 0, 0);"><br><img alt="" src="inblock.gif" align="top"><br><img id="Codehighlighter1_117_130_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_117_130_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_117_130_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_117_130_Closed_Text').style.display='inline';" src="expandedsubblockstart.gif" align="top"><img id="Codehighlighter1_117_130_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_117_130_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_117_130_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_117_130_Open_Text').style.display='inline';" src="contractedsubblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">string</span><span style="color: rgb(0, 0, 0);">&nbsp;UserName&nbsp;</span><span id="Codehighlighter1_117_130_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img alt="" src="dot.gif"></span><span id="Codehighlighter1_117_130_Open_Text"><span style="color: rgb(0, 0, 0);">{&nbsp;</span><span style="color: rgb(0, 0, 255);">get</span><span style="color: rgb(0, 0, 0);">;&nbsp;</span><span style="color: rgb(0, 0, 255);">set</span><span style="color: rgb(0, 0, 0);">;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);"><br><img alt="" src="inblock.gif" align="top"><br><img id="Codehighlighter1_162_175_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_162_175_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_162_175_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_162_175_Closed_Text').style.display='inline';" src="expandedsubblockstart.gif" align="top"><img id="Codehighlighter1_162_175_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_162_175_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_162_175_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_162_175_Open_Text').style.display='inline';" src="contractedsubblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;CompanyDao&nbsp;Dao&nbsp;</span><span id="Codehighlighter1_162_175_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img alt="" src="dot.gif"></span><span id="Codehighlighter1_162_175_Open_Text"><span style="color: rgb(0, 0, 0);">{&nbsp;</span><span style="color: rgb(0, 0, 255);">get</span><span style="color: rgb(0, 0, 0);">;&nbsp;</span><span style="color: rgb(0, 0, 255);">set</span><span style="color: rgb(0, 0, 0);">;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);"><br><img alt="" src="inblock.gif" align="top"><br><img alt="" src="expandedsubblockend.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">#endregion</span></span><span style="color: rgb(0, 0, 0);"><br><img alt="" src="inblock.gif" align="top"><br><img alt="" src="inblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;Save()<br><img id="Codehighlighter1_232_622_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_232_622_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_232_622_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_232_622_Closed_Text').style.display='inline';" src="expandedsubblockstart.gif" align="top"><img id="Codehighlighter1_232_622_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_232_622_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_232_622_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_232_622_Open_Text').style.display='inline';" src="contractedsubblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_232_622_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img alt="" src="dot.gif"></span><span id="Codehighlighter1_232_622_Open_Text"><span style="color: rgb(0, 0, 0);">{<br><img alt="" src="inblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">判断权限</span><span style="color: rgb(0, 128, 0);"><br><img alt="" src="inblock.gif" align="top"></span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ISecurityManager&nbsp;security&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;SecurityManager();<br><img alt="" src="inblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(security.IsPass(UserName))<br><img id="Codehighlighter1_371_492_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_371_492_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_371_492_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_371_492_Closed_Text').style.display='inline';" src="expandedsubblockstart.gif" align="top"><img id="Codehighlighter1_371_492_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_371_492_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_371_492_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_371_492_Open_Text').style.display='inline';" src="contractedsubblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_371_492_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img alt="" src="dot.gif"></span><span id="Codehighlighter1_371_492_Open_Text"><span style="color: rgb(0, 0, 0);">{<br><img alt="" src="inblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">执行业务方法<br><img alt="" src="inblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"><img alt="" src="dot.gif"><img alt="" src="dot.gif">.<br><img alt="" src="inblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">调用DAO层方法</span><span style="color: rgb(0, 128, 0);"><br><img alt="" src="inblock.gif" align="top"></span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dao.Save();<br><img alt="" src="expandedsubblockend.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);"><br><img alt="" src="inblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);"><br><img id="Codehighlighter1_522_612_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_522_612_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_522_612_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_522_612_Closed_Text').style.display='inline';" src="expandedsubblockstart.gif" align="top"><img id="Codehighlighter1_522_612_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_522_612_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_522_612_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_522_612_Open_Text').style.display='inline';" src="contractedsubblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_522_612_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img alt="" src="dot.gif"></span><span id="Codehighlighter1_522_612_Open_Text"><span style="color: rgb(0, 0, 0);">{<br><img alt="" src="inblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">执行其它业务方法<img alt="" src="dot.gif"></span><span style="color: rgb(0, 128, 0);"><br><img alt="" src="inblock.gif" align="top"></span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">您没有该权限</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br><img alt="" src="expandedsubblockend.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);"><br><img alt="" src="expandedsubblockend.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);"><br><img alt="" src="expandedblockend.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></span></div>
<p>&nbsp;</p>
<p>　　这样<span style="color: rgb(51, 102, 255);">CompanyManager</span>类与<span style="color: rgb(51, 102, 255);">ISecurityManager</span>或<span style="color: rgb(51, 102, 255);">SecurityManager</span>会发生业务性耦合。聪明的朋友会发现在GOF(设计模式)中有一种模式（代理模式）可以解除这种耦合。<br></p>
<p>　　第二种实现方式，<strong>代理模式</strong>(Proxy Pattern)：什么是代理模式？是给某一个对象提供一个代理对象，并由代理对象控制对源对象的引用。代理就是一个人或一个机构代表另一个人或者一个机构采取行动。某些情况下，客户不想或者不能够直接引用一个对象，代理对象可以在客户和目标对象直接起到中介的作用。客户端分辨不出代理主题对象与真实主题对象。代理模式可以并不知道真正的被代理对象，而仅仅持有一个被代理对象的接口，这时候代理对象不能够创建被代理对象，被代理对象必须有系统的其他角色代为创建并传入(图2)。<br><img alt="" src="2009-11-12.3.gif" border="0" height="93" width="382">图2<br></p>
<div class="cnblogs_code"><img style="display: none;" id="Code_Closed_Image_040659" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_040659').style.display='none'; document.getElementById('Code_Open_Image_040659').style.display='inline'; document.getElementById('Code_Open_Text_040659').style.display='inline';" src="contractedblock.gif" align="top" height="16" width="11"><img id="Code_Open_Image_040659" style="display: inline;" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_040659').style.display='none'; getElementById('Code_Closed_Image_040659').style.display='inline'; getElementById('Code_Closed_Text_040659').style.display='inline';" src="expandedblockstart.gif" align="top" height="16" width="11"><span style="display: none;" class="cnblogs_code_Collapse" id="Code_Closed_Text_040659">CompanyManager </span><span id="Code_Open_Text_040659" style="display: inline;"><br><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" src="none.gif" align="top"><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;CompanyManager&nbsp;:&nbsp;ICompanyManager<br><img id="Codehighlighter1_54_337_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_54_337_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_54_337_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_54_337_Closed_Text').style.display='inline';" src="expandedblockstart.gif" align="top"><img id="Codehighlighter1_54_337_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_54_337_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_54_337_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_54_337_Open_Text').style.display='inline';" src="contractedblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_54_337_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img alt="" src="dot.gif"></span><span id="Codehighlighter1_54_337_Open_Text"><span style="color: rgb(0, 0, 0);">{<br><img id="Codehighlighter1_64_193_Closed_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_64_193_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_64_193_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_64_193_Open_Text').style.display='inline';" src="contractedsubblock.gif" align="top"><img id="Codehighlighter1_64_193_Open_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_64_193_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_64_193_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_64_193_Closed_Text').style.display='inline';" src="expandedsubblockstart.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_64_193_Closed_Text" style="border: 1px solid rgb(128, 128, 128); background-color: rgb(255, 255, 255);">可通过外部注入的属性</span><span id="Codehighlighter1_64_193_Open_Text" style="display: none;"><span style="color: rgb(0, 0, 255);">#region</span><span style="color: rgb(0, 0, 0);">&nbsp;可通过外部注入的属性</span><span style="color: rgb(0, 0, 0);"><br><img alt="" src="inblock.gif" align="top"><br><img id="Codehighlighter1_115_128_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_115_128_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_115_128_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_115_128_Closed_Text').style.display='inline';" src="expandedsubblockstart.gif" align="top"><img id="Codehighlighter1_115_128_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_115_128_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_115_128_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_115_128_Open_Text').style.display='inline';" src="contractedsubblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">string</span><span style="color: rgb(0, 0, 0);">&nbsp;UserName&nbsp;</span><span id="Codehighlighter1_115_128_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img alt="" src="dot.gif"></span><span id="Codehighlighter1_115_128_Open_Text"><span style="color: rgb(0, 0, 0);">{&nbsp;</span><span style="color: rgb(0, 0, 255);">get</span><span style="color: rgb(0, 0, 0);">;&nbsp;</span><span style="color: rgb(0, 0, 255);">set</span><span style="color: rgb(0, 0, 0);">;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);"><br><img alt="" src="inblock.gif" align="top"><br><img id="Codehighlighter1_160_173_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_160_173_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_160_173_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_160_173_Closed_Text').style.display='inline';" src="expandedsubblockstart.gif" align="top"><img id="Codehighlighter1_160_173_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_160_173_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_160_173_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_160_173_Open_Text').style.display='inline';" src="contractedsubblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;CompanyDao&nbsp;Dao&nbsp;</span><span id="Codehighlighter1_160_173_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img alt="" src="dot.gif"></span><span id="Codehighlighter1_160_173_Open_Text"><span style="color: rgb(0, 0, 0);">{&nbsp;</span><span style="color: rgb(0, 0, 255);">get</span><span style="color: rgb(0, 0, 0);">;&nbsp;</span><span style="color: rgb(0, 0, 255);">set</span><span style="color: rgb(0, 0, 0);">;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);"><br><img alt="" src="inblock.gif" align="top"><br><img alt="" src="expandedsubblockend.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">#endregion</span></span><span style="color: rgb(0, 0, 0);"><br><img alt="" src="inblock.gif" align="top"><br><img alt="" src="inblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;Save()<br><img id="Codehighlighter1_230_331_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_230_331_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_230_331_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_230_331_Closed_Text').style.display='inline';" src="expandedsubblockstart.gif" align="top"><img id="Codehighlighter1_230_331_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_230_331_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_230_331_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_230_331_Open_Text').style.display='inline';" src="contractedsubblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_230_331_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img alt="" src="dot.gif"></span><span id="Codehighlighter1_230_331_Open_Text"><span style="color: rgb(0, 0, 0);">{<br><img alt="" src="inblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">执行业务方法<br><img alt="" src="inblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"><img alt="" src="dot.gif"><img alt="" src="dot.gif">.<br><img alt="" src="inblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">调用DAO层方法</span><span style="color: rgb(0, 128, 0);"><br><img alt="" src="inblock.gif" align="top"></span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dao.Save();<br><img alt="" src="expandedsubblockend.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);"><br><img alt="" src="expandedblockend.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></span></div>
<p>&nbsp;</p>
<div class="cnblogs_code"><img style="display: none;" id="Code_Closed_Image_040909" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_040909').style.display='none'; document.getElementById('Code_Open_Image_040909').style.display='inline'; document.getElementById('Code_Open_Text_040909').style.display='inline';" src="contractedblock.gif" align="top" height="16" width="11"><img id="Code_Open_Image_040909" style="display: inline;" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_040909').style.display='none'; getElementById('Code_Closed_Image_040909').style.display='inline'; getElementById('Code_Closed_Text_040909').style.display='inline';" src="expandedblockstart.gif" align="top" height="16" width="11"><span style="display: none;" class="cnblogs_code_Collapse" id="Code_Closed_Text_040909">CompanyProxyManager </span><span id="Code_Open_Text_040909" style="display: inline;"><br><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" src="none.gif" align="top"><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;CompanyProxyManager&nbsp;:&nbsp;ICompanyManager<br><img id="Codehighlighter1_59_528_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_59_528_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_59_528_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_59_528_Closed_Text').style.display='inline';" src="expandedblockstart.gif" align="top"><img id="Codehighlighter1_59_528_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_59_528_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_59_528_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_59_528_Open_Text').style.display='inline';" src="contractedblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_59_528_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img alt="" src="dot.gif"></span><span id="Codehighlighter1_59_528_Open_Text"><span style="color: rgb(0, 0, 0);">{<br><img id="Codehighlighter1_92_105_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_92_105_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_92_105_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_92_105_Closed_Text').style.display='inline';" src="expandedsubblockstart.gif" align="top"><img id="Codehighlighter1_92_105_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_92_105_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_92_105_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_92_105_Open_Text').style.display='inline';" src="contractedsubblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">string</span><span style="color: rgb(0, 0, 0);">&nbsp;UserName&nbsp;</span><span id="Codehighlighter1_92_105_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img alt="" src="dot.gif"></span><span id="Codehighlighter1_92_105_Open_Text"><span style="color: rgb(0, 0, 0);">{&nbsp;</span><span style="color: rgb(0, 0, 255);">get</span><span style="color: rgb(0, 0, 0);">;&nbsp;</span><span style="color: rgb(0, 0, 255);">set</span><span style="color: rgb(0, 0, 0);">;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);"><br><img alt="" src="inblock.gif" align="top"><br><img alt="" src="inblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);">&nbsp;ICompanyManager&nbsp;target&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;CompanyManager();<br><img alt="" src="inblock.gif" align="top"><br><img alt="" src="inblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;Save()<br><img id="Codehighlighter1_206_522_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_206_522_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_206_522_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_206_522_Closed_Text').style.display='inline';" src="expandedsubblockstart.gif" align="top"><img id="Codehighlighter1_206_522_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_206_522_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_206_522_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_206_522_Open_Text').style.display='inline';" src="contractedsubblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_206_522_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img alt="" src="dot.gif"></span><span id="Codehighlighter1_206_522_Open_Text"><span style="color: rgb(0, 0, 0);">{<br><img alt="" src="inblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">判断权限</span><span style="color: rgb(0, 128, 0);"><br><img alt="" src="inblock.gif" align="top"></span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ISecurityManager&nbsp;security&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;SecurityManager();<br><img alt="" src="inblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(security.IsPass(UserName))<br><img id="Codehighlighter1_345_422_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_345_422_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_345_422_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_345_422_Closed_Text').style.display='inline';" src="expandedsubblockstart.gif" align="top"><img id="Codehighlighter1_345_422_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_345_422_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_345_422_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_345_422_Open_Text').style.display='inline';" src="contractedsubblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_345_422_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img alt="" src="dot.gif"></span><span id="Codehighlighter1_345_422_Open_Text"><span style="color: rgb(0, 0, 0);">{<br><img alt="" src="inblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">调用目标对象Save方法</span><span style="color: rgb(0, 128, 0);"><br><img alt="" src="inblock.gif" align="top"></span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;target.Save();<br><img alt="" src="expandedsubblockend.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);"><br><img alt="" src="inblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);"><br><img id="Codehighlighter1_452_512_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_452_512_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_452_512_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_452_512_Closed_Text').style.display='inline';" src="expandedsubblockstart.gif" align="top"><img id="Codehighlighter1_452_512_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_452_512_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_452_512_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_452_512_Open_Text').style.display='inline';" src="contractedsubblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_452_512_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img alt="" src="dot.gif"></span><span id="Codehighlighter1_452_512_Open_Text"><span style="color: rgb(0, 0, 0);">{<br><img alt="" src="inblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">您没有该权限</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br><img alt="" src="expandedsubblockend.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);"><br><img alt="" src="expandedsubblockend.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);"><br><img alt="" src="expandedblockend.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></span></div>
<p>&nbsp;</p>
<p>　　这样，<span style="color: rgb(51, 102, 255);">CompanyManager</span>类就不必与判断权限的类<span style="color: rgb(51, 102, 255);">SecurityManager</span>耦合，但是这种方式实现起来比较麻烦。<br>&nbsp;</p>
<p>　　第三种实现方式，<a href="http://www.cnblogs.com/GoodHelper/tag/Spring.NET/" target="_top">Spring.NET</a>提供的<a href="http://www.cnblogs.com/GoodHelper/tag/AOP/" target="_top">AOP</a>：<span style="color: rgb(51, 102, 255);">AopAlliance.Intercept.IMethodInterceptor</span>接口和<span style="color: rgb(51, 102, 255);">ProxyFactory</span>类的组合。<br></p>
<div class="cnblogs_code"><img style="display: none;" id="Code_Closed_Image_041442" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_041442').style.display='none'; document.getElementById('Code_Open_Image_041442').style.display='inline'; document.getElementById('Code_Open_Text_041442').style.display='inline';" src="contractedblock.gif" align="top" height="16" width="11"><img id="Code_Open_Image_041442" style="display: inline;" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_041442').style.display='none'; getElementById('Code_Closed_Image_041442').style.display='inline'; getElementById('Code_Closed_Text_041442').style.display='inline';" src="expandedblockstart.gif" align="top" height="16" width="11"><span style="display: none;" class="cnblogs_code_Collapse" id="Code_Closed_Text_041442">AroundAdvice </span><span id="Code_Open_Text_041442" style="display: inline;"><br><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" src="none.gif" align="top"><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;AroundAdvice&nbsp;:&nbsp;IMethodInterceptor<br><img id="Codehighlighter1_55_594_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_55_594_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_55_594_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_55_594_Closed_Text').style.display='inline';" src="expandedblockstart.gif" align="top"><img id="Codehighlighter1_55_594_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_55_594_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_55_594_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_55_594_Open_Text').style.display='inline';" src="contractedblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_55_594_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img alt="" src="dot.gif"></span><span id="Codehighlighter1_55_594_Open_Text"><span style="color: rgb(0, 0, 0);">{<br><img alt="" src="inblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">权限系统类(可外部注入)</span><span style="color: rgb(0, 128, 0);"><br><img alt="" src="inblock.gif" align="top"></span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);">&nbsp;ISecurityManager&nbsp;manager&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;Service.SecurityManager();<br><img alt="" src="inblock.gif" align="top"><br><img alt="" src="inblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">object</span><span style="color: rgb(0, 0, 0);">&nbsp;Invoke(IMethodInvocation&nbsp;invocation)<br><img id="Codehighlighter1_222_588_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_222_588_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_222_588_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_222_588_Closed_Text').style.display='inline';" src="expandedsubblockstart.gif" align="top"><img id="Codehighlighter1_222_588_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_222_588_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_222_588_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_222_588_Open_Text').style.display='inline';" src="contractedsubblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_222_588_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img alt="" src="dot.gif"></span><span id="Codehighlighter1_222_588_Open_Text"><span style="color: rgb(0, 0, 0);">{<br><img alt="" src="inblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">拦截Save方法</span><span style="color: rgb(0, 128, 0);"><br><img alt="" src="inblock.gif" align="top"></span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(invocation.Method.Name&nbsp;</span><span style="color: rgb(0, 0, 0);">==</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">Save</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">)<br><img id="Codehighlighter1_309_488_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_309_488_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_309_488_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_309_488_Closed_Text').style.display='inline';" src="expandedsubblockstart.gif" align="top"><img id="Codehighlighter1_309_488_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_309_488_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_309_488_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_309_488_Open_Text').style.display='inline';" src="contractedsubblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_309_488_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img alt="" src="dot.gif"></span><span id="Codehighlighter1_309_488_Open_Text"><span style="color: rgb(0, 0, 0);">{<br><img alt="" src="inblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ICompanyManager&nbsp;target&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;(ICompanyManager)invocation.Target;<br><img alt="" src="inblock.gif" align="top"><br><img alt="" src="inblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;manager.IsPass(target.UserName)&nbsp;</span><span style="color: rgb(0, 0, 0);">?</span><span style="color: rgb(0, 0, 0);">&nbsp;invocation.Proceed()&nbsp;:&nbsp;</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">;<br><img alt="" src="expandedsubblockend.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);"><br><img alt="" src="inblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);"><br><img id="Codehighlighter1_518_578_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_518_578_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_518_578_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_518_578_Closed_Text').style.display='inline';" src="expandedsubblockstart.gif" align="top"><img id="Codehighlighter1_518_578_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_518_578_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_518_578_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_518_578_Open_Text').style.display='inline';" src="contractedsubblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_518_578_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img alt="" src="dot.gif"></span><span id="Codehighlighter1_518_578_Open_Text"><span style="color: rgb(0, 0, 0);">{<br><img alt="" src="inblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;invocation.Proceed();<br><img alt="" src="expandedsubblockend.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);"><br><img alt="" src="expandedsubblockend.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);"><br><img alt="" src="expandedblockend.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></span></div>
<p>&nbsp;</p>
<div class="cnblogs_code"><img style="display: none;" id="Code_Closed_Image_041502" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_041502').style.display='none'; document.getElementById('Code_Open_Image_041502').style.display='inline'; document.getElementById('Code_Open_Text_041502').style.display='inline';" src="contractedblock.gif" align="top" height="16" width="11"><img id="Code_Open_Image_041502" style="display: inline;" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_041502').style.display='none'; getElementById('Code_Closed_Image_041502').style.display='inline'; getElementById('Code_Closed_Text_041502').style.display='inline';" src="expandedblockstart.gif" align="top" height="16" width="11"><span style="display: none;" class="cnblogs_code_Collapse" id="Code_Closed_Text_041502">Program</span><span id="Code_Open_Text_041502" style="display: inline;"><br><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" src="none.gif" align="top"><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;Program<br><img id="Codehighlighter1_22_457_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_22_457_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_22_457_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_22_457_Closed_Text').style.display='inline';" src="expandedblockstart.gif" align="top"><img id="Codehighlighter1_22_457_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_22_457_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_22_457_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_22_457_Open_Text').style.display='inline';" src="contractedblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_22_457_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img alt="" src="dot.gif"></span><span id="Codehighlighter1_22_457_Open_Text"><span style="color: rgb(0, 0, 0);">{<br><img alt="" src="inblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;Main(</span><span style="color: rgb(0, 0, 255);">string</span><span style="color: rgb(0, 0, 0);">[]&nbsp;args)<br><img id="Codehighlighter1_72_451_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_72_451_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_72_451_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_72_451_Closed_Text').style.display='inline';" src="expandedsubblockstart.gif" align="top"><img id="Codehighlighter1_72_451_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_72_451_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_72_451_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_72_451_Open_Text').style.display='inline';" src="contractedsubblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_72_451_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img alt="" src="dot.gif"></span><span id="Codehighlighter1_72_451_Open_Text"><span style="color: rgb(0, 0, 0);">{<br><img id="Codehighlighter1_132_178_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_132_178_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_132_178_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_132_178_Closed_Text').style.display='inline';" src="expandedsubblockstart.gif" align="top"><img id="Codehighlighter1_132_178_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_132_178_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_132_178_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_132_178_Open_Text').style.display='inline';" src="contractedsubblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ICompanyManager&nbsp;target&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;CompanyManager()&nbsp;</span><span id="Codehighlighter1_132_178_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img alt="" src="dot.gif"></span><span id="Codehighlighter1_132_178_Open_Text"><span style="color: rgb(0, 0, 0);">{&nbsp;Dao&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;CompanyDao(),&nbsp;UserName&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">admin</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&nbsp;}</span></span><span style="color: rgb(0, 0, 0);">;<br><img alt="" src="inblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img alt="" src="inblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ProxyFactory&nbsp;factory&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;ProxyFactory(target);<br><img alt="" src="inblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;factory.AddAdvice(</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;AroundAdvice());<br><img alt="" src="inblock.gif" align="top"><br><img alt="" src="inblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ICompanyManager&nbsp;manager&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;(ICompanyManager)factory.GetProxy();<br><img alt="" src="inblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;manager.Save();<br><img alt="" src="inblock.gif" align="top"><br><img alt="" src="inblock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadLine();<br><img alt="" src="expandedsubblockend.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);"><br><img alt="" src="expandedblockend.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></span></div>
<p>&nbsp;</p>
<p>　　输出：保存数据<br>　　</p>
<p>&nbsp;</p>
<p>　　<a href="http://www.cnblogs.com/GoodHelper/tag/Spring.NET/" target="_top">Spring.NET</a>利用<span style="color: rgb(0, 0, 255);">System.Reflection.Emit</span>命名空间下的类在运行时动态创建IL代码来生成<a href="http://www.cnblogs.com/GoodHelper/tag/AOP/" target="_top">AOP</a>代理。这使得代理（的创建）非常高效，并且不受任何继承层次的限制。</p>
<p>&nbsp;</p>
<p>　　参考：Spring.NET中文手册</p>
<p>　　李会军博客代理模式<a href="http://www.cnblogs.com/terrylee/archive/2006/05/18/403382.html" target="_top">http://www.cnblogs.com/terrylee/archive/2006/05/18/403382.html</a></p>
<p>&nbsp;</p>
<p>　　<a href="http://files.cnblogs.com/GoodHelper/SpringNet_Lesson12.rar" target="_top">代码下载</a><br>&nbsp;</p>
<p>&nbsp;</p>
<p>　　<a href="http://www.cnblogs.com/GoodHelper/archive/2009/11/20/SpringNet_Index.html" target="_top">返回目录</a></p><div id="EntryTag">Tag标签: <a href="http://www.cnblogs.com/GoodHelper/tag/Spring.NET/">Spring.NET</a>,<a href="http://www.cnblogs.com/GoodHelper/tag/AOP/">AOP</a>,<a href="http://www.cnblogs.com/GoodHelper/tag/%e9%9d%a2%e5%90%91%e5%88%87%e9%9d%a2%e7%bc%96%e7%a8%8b/">面向切面编程</a></div>
<div id="digg_block">
<div id="div_digg">										
	<div class="diggit" onclick="DiggIt(1601445,58949,1)"> 
		<span class="diggnum" id="digg_count_1601445">1</span>
	</div>
	<div class="buryit" onclick="DiggIt(1601445,58949,2)"> 
		<span class="burynum" id="bury_count_1601445">0</span>
	</div>
	<div class="clear"></div>
	<span style="display: none;" id="span_isdigged_1601445">0</span>	
	<div class="diggword" id="digg_word_1601445">(请您对文章做出评价)</div>	
</div>
</div>
<div class="clear"></div>
<div id="post_next_prev">
<a href="http://www.cnblogs.com/GoodHelper/archive/2009/11/11/SpringNet_Life.html">« </a> 上一篇：<a href="http://www.cnblogs.com/GoodHelper/archive/2009/11/11/SpringNet_Life.html" title="发布于2009-11-11 04:20">Spring.NET学习笔记11——自定义对象行为(基础篇) Level 200</a><br>
<a href="http://www.cnblogs.com/GoodHelper/archive/2009/11/13/SpringNet_Aop_Concept.html">» </a> 下一篇：<a href="http://www.cnblogs.com/GoodHelper/archive/2009/11/13/SpringNet_Aop_Concept.html" title="发布于2009-11-13 02:32">Spring.NET学习笔记13——AOP的概念(基础篇) Level 200</a><br>
</div>








		</div>
		<div class="postDesc">posted @ 2009-11-12 04:23 <a href="http://www.cnblogs.com/GoodHelper/">刘冬.NET</a> 阅读(1543) <a href="#commentform">评论(8)</a> &nbsp;<a href="http://www.cnblogs.com/GoodHelper/admin/EditPosts.aspx?postid=1601445">编辑</a> <a href="http://www.cnblogs.com/GoodHelper/AddToFavorite.aspx?id=1601445">收藏</a> <a href="#" onclick="PutInWz();return false;">网摘</a>  所属分类: <a href="http://www.cnblogs.com/GoodHelper/category/215413.html">Spring.NET</a></div>
	</div>
	<img src="1601445.html" height="1" width="1">
	
<!--
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
<rdf:Description
rdf:about="http://www.cnblogs.com/GoodHelper/archive/2009/11/12/SpringNet_Aop.html"
dc:identifier="http://www.cnblogs.com/GoodHelper/archive/2009/11/12/SpringNet_Aop.html"
dc:title=""
trackback:ping="http://www.cnblogs.com/GoodHelper/services/trackbacks/1601445.aspx" />
</rdf:RDF>
-->

</div><!--end: topics 文章、评论容器-->
<a name="pagedcomment"></a>
<!--done-->
<br>
<div class="feedback_area_title">发表评论</div>
<div class="feedbackNoItems"><span id="span_comment_maxid" style="display: none;">1740940</span></div>
	

		<div class="feedbackItem">
			<div class="feedbackListSubtitle">
				<div class="feedbackManage">
					&nbsp;&nbsp;<a onclick='ReplyComment("阿滨 ",1696017,"1dpRMBTAQi6a7cHYx82V9BE0XpBmfc+2RgAe6SpnPyfD9VDJuZ2MJQ==")' href="http://www.cnblogs.com/goodhelper/archive/2009/11/12/springnet_aop.html#commentform">回复</a>&nbsp;&nbsp;<a onclick='QuoteComment(1696017,"1dpRMBTAQi6a7cHYx82V9BE0XpBmfc+2RgAe6SpnPyfD9VDJuZ2MJQ==")' href="http://www.cnblogs.com/goodhelper/archive/2009/11/12/springnet_aop.html#commentform">引用</a>&nbsp;&nbsp;<a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=%e9%98%bf%e6%bb%a8+" target="_top">查看</a>&nbsp;&nbsp;<a id="Comments1_CommentList_ctl00_DeleteLink" href="javascript:__doPostBack('Comments1$CommentList$ctl00$DeleteLink','')"></a>&nbsp;&nbsp;<a id="Comments1_CommentList_ctl00_EditLink" causesvalidation="False"></a>
				</div>
				<a href="#1696017">#1楼</a><a name="1696017" id="comment_anchor_1696017"></a>2009-11-12 08:57 | <a id="Comments1_CommentList_ctl00_NameLink" href="http://www.cnblogs.com/mextb1860/" target="_top">阿滨 </a>&nbsp;<a href="http://space.cnblogs.com/msg/send/%e9%98%bf%e6%bb%a8+" title="给此人发送站内短消息" class="sendMsg2This">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a>
			</div>
			<div class="feedbackCon">
				<span id="comment_body_1696017" class="blog_comment_body">aop的部分终于出来了..讲的东西也太少了吧....</span><br>
			</div>
		</div>
	
		<div class="feedbackItem">
			<div class="feedbackListSubtitle">
				<div class="feedbackManage">
					&nbsp;&nbsp;<a onclick='ReplyComment("阿滨 ",1696027,"1dpRMBTAQi6a7cHYx82V9BE0XpBmfc+2RgAe6SpnPyfD9VDJuZ2MJQ==")' href="http://www.cnblogs.com/goodhelper/archive/2009/11/12/springnet_aop.html#commentform">回复</a>&nbsp;&nbsp;<a onclick='QuoteComment(1696027,"1dpRMBTAQi6a7cHYx82V9BE0XpBmfc+2RgAe6SpnPyfD9VDJuZ2MJQ==")' href="http://www.cnblogs.com/goodhelper/archive/2009/11/12/springnet_aop.html#commentform">引用</a>&nbsp;&nbsp;<a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=%e9%98%bf%e6%bb%a8+" target="_top">查看</a>&nbsp;&nbsp;<a id="Comments1_CommentList_ctl01_DeleteLink" href="javascript:__doPostBack('Comments1$CommentList$ctl01$DeleteLink','')"></a>&nbsp;&nbsp;<a id="Comments1_CommentList_ctl01_EditLink" causesvalidation="False"></a>
				</div>
				<a href="#1696027">#2楼</a><a name="1696027" id="comment_anchor_1696027"></a>2009-11-12 09:05 | <a id="Comments1_CommentList_ctl01_NameLink" href="http://www.cnblogs.com/mextb1860/" target="_top">阿滨 </a>&nbsp;<a href="http://space.cnblogs.com/msg/send/%e9%98%bf%e6%bb%a8+" title="给此人发送站内短消息" class="sendMsg2This">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a>
			</div>
			<div class="feedbackCon">
				<span id="comment_body_1696027" class="blog_comment_body">如何能和nhibernate配合讲讲就好了!</span><br>
			</div>
		</div>
	
		<div class="feedbackItem">
			<div class="feedbackListSubtitle">
				<div class="feedbackManage">
					&nbsp;&nbsp;<a onclick='ReplyComment("宏宇",1696032,"7gh1i42fE/KPjnFOiU8Omp8CpdtfDq1dHCY54cag1Wt4OjETncTLIg==")' href="http://www.cnblogs.com/goodhelper/archive/2009/11/12/springnet_aop.html#commentform">回复</a>&nbsp;&nbsp;<a onclick='QuoteComment(1696032,"7gh1i42fE/KPjnFOiU8Omp8CpdtfDq1dHCY54cag1Wt4OjETncTLIg==")' href="http://www.cnblogs.com/goodhelper/archive/2009/11/12/springnet_aop.html#commentform">引用</a>&nbsp;&nbsp;<a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=%e5%ae%8f%e5%ae%87" target="_top">查看</a>&nbsp;&nbsp;<a id="Comments1_CommentList_ctl02_DeleteLink" href="javascript:__doPostBack('Comments1$CommentList$ctl02$DeleteLink','')"></a>&nbsp;&nbsp;<a id="Comments1_CommentList_ctl02_EditLink" causesvalidation="False"></a>
				</div>
				<a href="#1696032">#3楼</a><a name="1696032" id="comment_anchor_1696032"></a>2009-11-12 09:07 | <a id="Comments1_CommentList_ctl02_NameLink" href="http://www.cnblogs.com/cuihongyu3503319/" target="_top">宏宇</a>&nbsp;<a href="http://space.cnblogs.com/msg/send/%e5%ae%8f%e5%ae%87" title="给此人发送站内短消息" class="sendMsg2This">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a>
			</div>
			<div class="feedbackCon">
				<span id="comment_body_1696032" class="blog_comment_body">以前弄spring.net的时候，aop部分就没有完全弄清楚，希望作者可以把它完全的展示出来</span><br>
			</div>
		</div>
	
		<div class="feedbackItem">
			<div class="feedbackListSubtitle">
				<div class="feedbackManage">
					&nbsp;&nbsp;<a onclick='ReplyComment("陛下",1696116,"Ct7IDZPu0Ymz78E5QmjRzzByMj8Gyk2vMIump6AzyRiPjzmUsNzVcQ==")' href="http://www.cnblogs.com/goodhelper/archive/2009/11/12/springnet_aop.html#commentform">回复</a>&nbsp;&nbsp;<a onclick='QuoteComment(1696116,"Ct7IDZPu0Ymz78E5QmjRzzByMj8Gyk2vMIump6AzyRiPjzmUsNzVcQ==")' href="http://www.cnblogs.com/goodhelper/archive/2009/11/12/springnet_aop.html#commentform">引用</a>&nbsp;&nbsp;<a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=%e9%99%9b%e4%b8%8b" target="_top">查看</a>&nbsp;&nbsp;<a id="Comments1_CommentList_ctl03_DeleteLink" href="javascript:__doPostBack('Comments1$CommentList$ctl03$DeleteLink','')"></a>&nbsp;&nbsp;<a id="Comments1_CommentList_ctl03_EditLink" causesvalidation="False"></a>
				</div>
				<a href="#1696116">#4楼</a><a name="1696116" id="comment_anchor_1696116"></a>2009-11-12 09:59 | <a id="Comments1_CommentList_ctl03_NameLink" href="http://www.cnblogs.com/howard-queen/" target="_top">陛下</a>&nbsp;<a href="http://space.cnblogs.com/msg/send/%e9%99%9b%e4%b8%8b" title="给此人发送站内短消息" class="sendMsg2This">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a>
			</div>
			<div class="feedbackCon">
				<span id="comment_body_1696116" class="blog_comment_body">职责划分确实是个棘手的问题，属性、方法、事件的膨胀，往往使得当事人手足无措，采用内聚是个不错的方案；但结合动态创建 IL，就显得更美妙了。<br>AOP 是不是指的一种半自动的“切面”分割重组方案？<br>感谢楼主撰文！</span><br>
			</div>
		</div>
	
		<div class="feedbackItem">
			<div class="feedbackListSubtitle">
				<div class="feedbackManage">
					&nbsp;&nbsp;<a onclick='ReplyComment("刘冬.NET",1696378,"3r1xwsTrI4CV2TS68/JZDe8Nke98EOtx+8ZIuyP4wWjb/q4OPzhLUg==")' href="http://www.cnblogs.com/goodhelper/archive/2009/11/12/springnet_aop.html#commentform">回复</a>&nbsp;&nbsp;<a onclick='QuoteComment(1696378,"3r1xwsTrI4CV2TS68/JZDe8Nke98EOtx+8ZIuyP4wWjb/q4OPzhLUg==")' href="http://www.cnblogs.com/goodhelper/archive/2009/11/12/springnet_aop.html#commentform">引用</a>&nbsp;&nbsp;<a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=%e5%88%98%e5%86%ac.NET" target="_top">查看</a>&nbsp;&nbsp;<a id="Comments1_CommentList_ctl04_DeleteLink" href="javascript:__doPostBack('Comments1$CommentList$ctl04$DeleteLink','')"></a>&nbsp;&nbsp;<a id="Comments1_CommentList_ctl04_EditLink" causesvalidation="False"></a>
				</div>
				<a href="#1696378">#5楼</a><a name="1696378" id="comment_anchor_1696378"></a>[<span class="louzhu">楼主</span>]2009-11-12 13:17 | <a id="Comments1_CommentList_ctl04_NameLink" href="http://www.cnblogs.com/GoodHelper/" target="_top">刘冬.NET</a>&nbsp;<a href="http://space.cnblogs.com/msg/send/%e5%88%98%e5%86%ac.NET" title="给此人发送站内短消息" class="sendMsg2This">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a>
			</div>
			<div class="feedbackCon">
				<span id="comment_body_1696378" class="blog_comment_body">这篇是aop的开场白。</span><br>
			</div>
		</div>
	
		<div class="feedbackItem">
			<div class="feedbackListSubtitle">
				<div class="feedbackManage">
					&nbsp;&nbsp;<a onclick='ReplyComment("Coder Lee",1696471,"VsKIZswvBRp2yIW89fC9d7qZb2t4L/FcXcQbrOXeoI+8FDY6c6cU/A==")' href="http://www.cnblogs.com/goodhelper/archive/2009/11/12/springnet_aop.html#commentform">回复</a>&nbsp;&nbsp;<a onclick='QuoteComment(1696471,"VsKIZswvBRp2yIW89fC9d7qZb2t4L/FcXcQbrOXeoI+8FDY6c6cU/A==")' href="http://www.cnblogs.com/goodhelper/archive/2009/11/12/springnet_aop.html#commentform">引用</a>&nbsp;&nbsp;<a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=Coder+Lee" target="_top">查看</a>&nbsp;&nbsp;<a id="Comments1_CommentList_ctl05_DeleteLink" href="javascript:__doPostBack('Comments1$CommentList$ctl05$DeleteLink','')"></a>&nbsp;&nbsp;<a id="Comments1_CommentList_ctl05_EditLink" causesvalidation="False"></a>
				</div>
				<a href="#1696471">#6楼</a><a name="1696471" id="comment_anchor_1696471"></a>2009-11-12 14:29 | <a id="Comments1_CommentList_ctl05_NameLink" href="http://www.cnblogs.com/sunshine-anycall/" target="_top">Coder Lee</a>&nbsp;<a href="http://space.cnblogs.com/msg/send/Coder+Lee" title="给此人发送站内短消息" class="sendMsg2This">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a>
			</div>
			<div class="feedbackCon">
				<span id="comment_body_1696471" class="blog_comment_body"><fieldset class="comment_quote"><legend><a href="#1696378" title="查看引用原文">引用</a></legend>刘冬.NET：这篇是aop的开场白。</fieldset><br>原来只是开篇，他好了<br>期待更精彩的下文！~~~</span><br>
			</div>
		</div>
	
		<div class="feedbackItem">
			<div class="feedbackListSubtitle">
				<div class="feedbackManage">
					&nbsp;&nbsp;<a onclick='ReplyComment("刘冬.NET",1696533,"3r1xwsTrI4CV2TS68/JZDe8Nke98EOtx+8ZIuyP4wWjb/q4OPzhLUg==")' href="http://www.cnblogs.com/goodhelper/archive/2009/11/12/springnet_aop.html#commentform">回复</a>&nbsp;&nbsp;<a onclick='QuoteComment(1696533,"3r1xwsTrI4CV2TS68/JZDe8Nke98EOtx+8ZIuyP4wWjb/q4OPzhLUg==")' href="http://www.cnblogs.com/goodhelper/archive/2009/11/12/springnet_aop.html#commentform">引用</a>&nbsp;&nbsp;<a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=%e5%88%98%e5%86%ac.NET" target="_top">查看</a>&nbsp;&nbsp;<a id="Comments1_CommentList_ctl06_DeleteLink" href="javascript:__doPostBack('Comments1$CommentList$ctl06$DeleteLink','')"></a>&nbsp;&nbsp;<a id="Comments1_CommentList_ctl06_EditLink" causesvalidation="False"></a>
				</div>
				<a href="#1696533">#7楼</a><a name="1696533" id="comment_anchor_1696533"></a>[<span class="louzhu">楼主</span>]2009-11-12 15:20 | <a id="Comments1_CommentList_ctl06_NameLink" href="http://www.cnblogs.com/GoodHelper/" target="_top">刘冬.NET</a>&nbsp;<a href="http://space.cnblogs.com/msg/send/%e5%88%98%e5%86%ac.NET" title="给此人发送站内短消息" class="sendMsg2This">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a>
			</div>
			<div class="feedbackCon">
				<span id="comment_body_1696533" class="blog_comment_body"><a href="#1696471" title="查看所回复的评论">@</a>Coder Lee<br>呵呵，谢谢捧场</span><br>
			</div>
		</div>
	
		<div class="feedbackItem">
			<div class="feedbackListSubtitle">
				<div class="feedbackManage">
					&nbsp;&nbsp;<a onclick='ReplyComment("张永存(Jerry)",1740940,"YfZyH4/WBR0lkV5NMjh6+6YsAYsThm8sOPMbQHb8WVHulI2gmNhV9A==")' href="http://www.cnblogs.com/goodhelper/archive/2009/11/12/springnet_aop.html#commentform">回复</a>&nbsp;&nbsp;<a onclick='QuoteComment(1740940,"YfZyH4/WBR0lkV5NMjh6+6YsAYsThm8sOPMbQHb8WVHulI2gmNhV9A==")' href="http://www.cnblogs.com/goodhelper/archive/2009/11/12/springnet_aop.html#commentform">引用</a>&nbsp;&nbsp;<a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=%e5%bc%a0%e6%b0%b8%e5%ad%98%28Jerry%29" target="_top">查看</a>&nbsp;&nbsp;<a id="Comments1_CommentList_ctl07_DeleteLink" href="javascript:__doPostBack('Comments1$CommentList$ctl07$DeleteLink','')"></a>&nbsp;&nbsp;<a id="Comments1_CommentList_ctl07_EditLink" causesvalidation="False"></a>
				</div>
				<a href="#1740940">#8楼</a><a name="1740940" id="comment_anchor_1740940"></a><a name="Post"></a>2010-01-05 17:36 | <a id="Comments1_CommentList_ctl07_NameLink" href="http://www.cnblogs.com/JerryBaxia/" target="_top">张永存(Jerry)</a>&nbsp;<a href="http://space.cnblogs.com/msg/send/%e5%bc%a0%e6%b0%b8%e5%ad%98%28Jerry%29" title="给此人发送站内短消息" class="sendMsg2This">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a>
			</div>
			<div class="feedbackCon">
				<span id="comment_body_1740940" class="blog_comment_body">哈哈，我看了<br>那如果这样的话，我给我的每一个类在创建的时候都添加一个代理类<br>那在后期如果有更新可验证的话就直接在代理类写就可以了，是吧<br><br>哈哈</span><br>
			</div>
		</div>
	

<div id="ctl05_comment_form" class="commentform">




<div id="ctl05_divLoginPannel">
<div class="login_tips">注册用户登录后才能发表评论，请 <a href="http://passport.cnblogs.com/login.aspx?ReturnUrl=http%3a%2f%2fwww.cnblogs.com%2fgoodhelper%2farchive%2f2009%2f11%2f12%2fspringnet_aop.html%3flogin%3d1%23commentform" class="underline">登录</a> 或 <a href="http://passport.cnblogs.com/register.aspx?ReturnUrl=http%3a%2f%2fwww.cnblogs.com%2fgoodhelper%2farchive%2f2009%2f11%2f12%2fspringnet_aop.html%23Bottom2" class="underline">注册</a> 。</div>
</div>

<div class="itnews c_ad_block" id="itnews">
<a href="http://news.cnblogs.com/" target="_top">IT新闻</a>:<br>

          ·  <a href="http://news.cnblogs.com/n/55140/" target="_top">《星际争霸2》"刀锋女王"重金属主题音乐视频</a><br>
	
          ·  <a href="http://news.cnblogs.com/n/55139/" target="_top">中国站长最郁闷的几件事情</a><br>
	
          ·  <a href="http://news.cnblogs.com/n/55138/" target="_top">苹果Vs谷歌：手机领域谁怕谁？</a><br>
	
          ·  <a href="http://news.cnblogs.com/n/55137/" target="_top">摩托罗拉：豪赌Android的希望与隐忧</a><br>
	
          ·  <a href="http://news.cnblogs.com/n/55136/" target="_top">分众新坐标：楼宇是过去 未来在手机和互联网</a><br>
	
</div>


<div id="ad_under_comment" class="c_ad_block">
<a href="http://a4.yeshj.com/rd/34138/" target="_top">每天10分钟，轻松学英语</a><br><br>
<div id="google_ads_div_cnblogs_blogpost_bottom1">
<iframe src="index_2.html" style="border: 0pt none ;" marginheight="0" marginwidth="0" name="google_ads_iframe_cnblogs_blogpost_bottom1" id="google_ads_iframe_cnblogs_blogpost_bottom1" scrolling="no" frameborder="0" height="60" width="468"></iframe></div>

<br>
<div id="google_ads_div_cnblogs_blogpost_bottom">
<iframe src="index_3.html" style="border: 0pt none ;" marginheight="0" marginwidth="0" name="google_ads_iframe_cnblogs_blogpost_bottom" id="google_ads_iframe_cnblogs_blogpost_bottom" scrolling="no" frameborder="0" height="250" width="300"></iframe></div>

</div>
<div id="site_nav_under" class="c_ad_block">
网站导航：<br>
<a href="http://www.cnblogs.com/" target="_top">博客园首页</a> &nbsp;<a href="http://news.cnblogs.com/" target="_top">IT新闻</a> &nbsp;<a href="http://home.cnblogs.com/" target="_top">个人主页</a> &nbsp;<a href="http://home.cnblogs.com/ing/" target="_top">闪存</a> &nbsp;<a href="http://job.cnblogs.com/" target="_top">程序员招聘</a> &nbsp;<a href="http://space.cnblogs.com/" target="_top">社区</a> &nbsp;<a href="http://space.cnblogs.com/q/" target="_top">博问</a> &nbsp;<a href="http://wz.cnblogs.com/" target="_top">网摘</a>
</div>
<div id="ad_under_comment2" class="c_ad_block">
<a href="http://www.china-pub.com/STATIC07/0912/zh_ndcx_091212.asp" target="_top"><img src="chinapub_20091222.jpg" alt="" style="border: 0px none ;"></a><br>
<a href="http://www.china-pub.com/itbook/" target="_top">China-pub 计算机图书网上专卖店！6.5万品种2-8折！</a><br>
<a href="http://www.china-pub.com/static07/0901/zh_jueba_090121.asp" target="_top">China-Pub 计算机绝版图书按需印刷服务</a><br>
</div>

<div id="relative_search"><br><b>相关搜索:</b><br> <a href="http://zzk.cnblogs.com/s?w=Spring.NET" target="_top">Spring.NET</a> <a href="http://zzk.cnblogs.com/s?w=AOP" target="_top">AOP</a> <a href="http://zzk.cnblogs.com/s?w=%e9%9d%a2%e5%90%91%e5%88%87%e9%9d%a2%e7%bc%96%e7%a8%8b" target="_top">面向切面编程</a> <a href="http://zzk.cnblogs.com/s?w=Spring.NET" target="_top">Spring.NET</a> </div><div id="relative_search"><br><b>在知识库中查看：</b><br> <a href="http://kb.cnblogs.com/a/1601445/">Spring.NET学习笔记12——面向切面编程(基础篇) Level 300</a></div>

</div>


				
	</div><!--end: forFlow -->
	</div><!--end: mainContent 主体内容容器-->

	<div id="sideBar">
		<div id="sideBarMain">
			
<!--done-->
<div class="newsItem">
<h3 class="catListTitle">公告</h3>
	<div id="profile_block"><a href="http://home.cnblogs.com/GoodHelper/" target="_top">我的主页</a>&nbsp; <a href="http://home.cnblogs.com/GoodHelper/detail/" target="_top">个人资料</a><br><a href="http://home.cnblogs.com/GoodHelper/ing/" target="_top">我的闪存</a>&nbsp; <a href="http://space.cnblogs.com/msg/send/%e5%88%98%e5%86%ac.NET" target="_top">发短消息</a></div>
</div>

			
<div id="calendar">
<table id="Calendar1_entryCal" class="Cal" title="Calendar" border="0" cellpadding="0" cellspacing="0">
	<tbody><tr><td colspan="7"><table class="CalTitle" border="0" cellspacing="0">
		<tbody><tr><td class="CalNextPrev"><a href="javascript:__doPostBack('Calendar1$entryCal','V3622')" style="color: Black;" title="Go to the previous month">&lt;</a></td><td align="center">2010年1月</td><td class="CalNextPrev" align="right"><a href="javascript:__doPostBack('Calendar1$entryCal','V3684')" style="color: Black;" title="Go to the next month">&gt;</a></td></tr>
	</tbody></table></td></tr><tr><th class="CalDayHeader" abbr="日" scope="col" align="center">日</th><th class="CalDayHeader" abbr="一" scope="col" align="center">一</th><th class="CalDayHeader" abbr="二" scope="col" align="center">二</th><th class="CalDayHeader" abbr="三" scope="col" align="center">三</th><th class="CalDayHeader" abbr="四" scope="col" align="center">四</th><th class="CalDayHeader" abbr="五" scope="col" align="center">五</th><th class="CalDayHeader" abbr="六" scope="col" align="center">六</th></tr><tr><td class="CalOtherMonthDay" align="center">27</td><td class="CalOtherMonthDay" align="center">28</td><td class="CalOtherMonthDay" align="center">29</td><td class="CalOtherMonthDay" align="center">30</td><td class="CalOtherMonthDay" align="center">31</td><td align="center">1</td><td class="CalWeekendDay" align="center">2</td></tr><tr><td class="CalWeekendDay" align="center">3</td><td align="center">4</td><td align="center">5</td><td align="center">6</td><td align="center">7</td><td align="center">8</td><td class="CalWeekendDay" align="center">9</td></tr><tr><td class="CalWeekendDay" align="center">10</td><td align="center">11</td><td align="center">12</td><td align="center">13</td><td align="center">14</td><td align="center">15</td><td class="CalWeekendDay" align="center">16</td></tr><tr><td class="CalTodayDay" align="center">17</td><td align="center">18</td><td align="center">19</td><td align="center">20</td><td align="center">21</td><td align="center">22</td><td class="CalWeekendDay" align="center">23</td></tr><tr><td class="CalWeekendDay" align="center">24</td><td align="center">25</td><td align="center">26</td><td align="center">27</td><td align="center">28</td><td align="center">29</td><td class="CalWeekendDay" align="center">30</td></tr><tr><td class="CalWeekendDay" align="center">31</td><td class="CalOtherMonthDay" align="center">1</td><td class="CalOtherMonthDay" align="center">2</td><td class="CalOtherMonthDay" align="center">3</td><td class="CalOtherMonthDay" align="center">4</td><td class="CalOtherMonthDay" align="center">5</td><td class="CalOtherMonthDay" align="center">6</td></tr>
</tbody></table>
</div>

			
			<div id="leftcontentcontainer">
				

<div class="mySearch">
<h3 class="catListTitle">搜索</h3>
<div class="div_my_zzk"><input value="" id="q" onkeydown="return zzk_go_enter(event);" class="input_my_zzk" type="text">&nbsp;<input onclick="zzk_go()" value="找找看" id="btnZzk" class="btn_my_zzk" type="button"></div>
</div>
<div class="catListLink">
<h3 class="catListTitle">常用链接</h3>
<ul>

		<li><a id="SingleColumn1_ctl02_rptMainLinks_ctl00_lnkLinkItem" href="http://www.cnblogs.com/GoodHelper/MyPosts.html">我的随笔</a></li>
	
		<li><a id="SingleColumn1_ctl02_rptMainLinks_ctl01_lnkLinkItem" href="http://home.cnblogs.com/GoodHelper/">我的空间</a></li>
	
		<li><a id="SingleColumn1_ctl02_rptMainLinks_ctl02_lnkLinkItem" href="http://space.cnblogs.com/msg/recent">我的短信</a></li>
	
		<li><a id="SingleColumn1_ctl02_rptMainLinks_ctl03_lnkLinkItem" href="http://www.cnblogs.com/GoodHelper/MyComments.html">我的评论</a></li>
	
<li><a id="itemListLink" onclick="this.blur();WarpClass('itemListLink', 'itemListLin_con');return false;" href="#">更多链接</a></li>
</ul>
<div id="itemListLin_con" style="display: none;">
<ul>

		<li><a id="SingleColumn1_ctl02_repeaterLinks_ctl00_lnkLinkItem" title="我发表过评论的随笔" href="http://www.cnblogs.com/GoodHelper/OtherPosts.html">我的参与</a></li>
	
		<li><a id="SingleColumn1_ctl02_repeaterLinks_ctl01_lnkLinkItem" href="http://www.cnblogs.com/GoodHelper/MyNews.html">我的新闻</a></li>
	
		<li><a id="SingleColumn1_ctl02_repeaterLinks_ctl02_lnkLinkItem" href="http://www.cnblogs.com/GoodHelper/RecentComments.html">最新评论</a></li>
	
		<li><a id="SingleColumn1_ctl02_repeaterLinks_ctl03_lnkLinkItem" href="http://www.cnblogs.com/GoodHelper/tag/">我的标签</a></li>
	
</ul>
</div>
</div>

<div class="catListTag">
<h3 class="catListTitle">我的标签</h3>
<ul>
<li><a href="http://www.cnblogs.com/GoodHelper/tag/Spring.NET/">Spring.NET</a>(30)</li><li><a href="http://www.cnblogs.com/GoodHelper/tag/NHibernate/">NHibernate</a>(7)</li><li><a href="http://www.cnblogs.com/GoodHelper/tag/AOP/">AOP</a>(7)</li><li><a href="http://www.cnblogs.com/GoodHelper/tag/IoC/">IoC</a>(5)</li><li><a href="http://www.cnblogs.com/GoodHelper/tag/%e4%be%9d%e8%b5%96%e6%b3%a8%e5%85%a5/">依赖注入</a>(4)</li><li><a href="http://www.cnblogs.com/GoodHelper/tag/NVelocity/">NVelocity</a>(4)</li><li><a href="http://www.cnblogs.com/GoodHelper/tag/WCF/">WCF</a>(3)</li><li><a href="http://www.cnblogs.com/GoodHelper/tag/ASP.NET+MVC/">ASP.NET MVC</a>(3)</li><li><a href="http://www.cnblogs.com/GoodHelper/tag/Linq/">Linq</a>(3)</li><li><a href="http://www.cnblogs.com/GoodHelper/tag/DI/">DI</a>(3)</li><li><a href="http://www.cnblogs.com/GoodHelper/tag/">更多</a></li>
</ul>
</div>
<div class="catListPostCategory">
<h3 class="catListTitle">随笔分类<span style="font-size: 11px; font-weight: normal;">(36)</span></h3>

<ul>

<li><a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl01_Link" href="http://www.cnblogs.com/GoodHelper/category/214139.html">NHibernate(7)</a> <a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl01_RssLink" title="Subscribe to NHibernate(7)" href="http://www.cnblogs.com/GoodHelper/category/214139.html/rss">(rss)</a></li>

<li><a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl02_Link" href="http://www.cnblogs.com/GoodHelper/category/215413.html">Spring.NET(29)</a> <a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl02_RssLink" title="Subscribe to Spring.NET(29)" href="http://www.cnblogs.com/GoodHelper/category/215413.html/rss">(rss)</a></li>

</ul>

</div>

<div class="catListPostArchive">
<h3 class="catListTitle">随笔档案<span style="font-size: 11px; font-weight: normal;">(28)</span></h3>

<ul>

<li><a id="SingleColumn1_Categories_CatList_ctl01_LinkList_ctl01_Link" href="http://www.cnblogs.com/GoodHelper/archive/2009/11.html">2009年11月 (20)</a> </li>

<li><a id="SingleColumn1_Categories_CatList_ctl01_LinkList_ctl02_Link" href="http://www.cnblogs.com/GoodHelper/archive/2009/10.html">2009年10月 (8)</a> </li>

</ul>

</div>

<div class="catListArticleCategory">
<h3 class="catListTitle">文章分类</h3>

<ul>

<li><a id="SingleColumn1_Categories_CatList_ctl02_LinkList_ctl01_Link" href="http://www.cnblogs.com/GoodHelper/category/214956.html">Spring.NET</a> <a id="SingleColumn1_Categories_CatList_ctl02_LinkList_ctl01_RssLink" title="Subscribe to Spring.NET" href="http://www.cnblogs.com/GoodHelper/category/214956.html/rss">(rss)</a></li>

</ul>

</div>

<div class="catListImageCategory">
<h3 class="catListTitle">相册</h3>

<ul>

<li><a id="SingleColumn1_Categories_CatList_ctl03_LinkList_ctl01_Link" href="http://www.cnblogs.com/GoodHelper/gallery/219559.html">广州宿舍</a> </li>

</ul>

</div>



<div class="catListBlogRank">
<h3 class="catListTitle">积分与排名</h3>
<ul>
	<li class="liScore">
		积分 -	51075
	</li><li class="liRank">
		排名 -	1473
	</li>
</ul>
</div>



<div class="catListEssay">
<h3 class="catListTitle">最新随笔</h3>
<ul>
	
	
			<li><a id="SingleColumn1_ctl06_RecentPostsList_ctl00_RecentPostsList2_ctl00_Hyperlink1" href="http://www.cnblogs.com/GoodHelper/archive/2009/11/21/SpringNet_blogs.html">1.&nbsp;Spring.NET学习笔记——前言</a></li>
		
			
	
			<li><a id="SingleColumn1_ctl06_RecentPostsList_ctl01_RecentPostsList2_ctl00_Hyperlink1" href="http://www.cnblogs.com/GoodHelper/archive/2009/11/20/SpringNet_NVelocity.html">2.&nbsp;Spring.NET学习笔记26——整合NVelocity(应用篇) Level 200</a></li>
		
			<li><a id="SingleColumn1_ctl06_RecentPostsList_ctl01_RecentPostsList2_ctl01_Hyperlink1" href="http://www.cnblogs.com/GoodHelper/archive/2009/11/20/SpringNet_Index.html">3.&nbsp;Spring.NET学习笔记——目录(原)</a></li>
		
			<li><a id="SingleColumn1_ctl06_RecentPostsList_ctl01_RecentPostsList2_ctl02_Hyperlink1" href="http://www.cnblogs.com/GoodHelper/archive/2009/11/20/SpringNet_QuartzNet.html">4.&nbsp;Spring.NET学习笔记25——整合Quartz.NET(应用篇) Level 200</a></li>
		
			
	
			<li><a id="SingleColumn1_ctl06_RecentPostsList_ctl02_RecentPostsList2_ctl00_Hyperlink1" href="http://www.cnblogs.com/GoodHelper/archive/2009/11/19/SpringNet_WebService.html">5.&nbsp;Spring.NET学习笔记21——整合Web Service(应用篇) Level 200</a></li>
		
			<li><a id="SingleColumn1_ctl06_RecentPostsList_ctl02_RecentPostsList2_ctl01_Hyperlink1" href="http://www.cnblogs.com/GoodHelper/archive/2009/11/19/SpringNet_Remoting.html">6.&nbsp;Spring.NET学习笔记20——整合Remoting(应用篇) Level 200</a></li>
		
			<li><a id="SingleColumn1_ctl06_RecentPostsList_ctl02_RecentPostsList2_ctl02_Hyperlink1" href="http://www.cnblogs.com/GoodHelper/archive/2009/11/19/SpringNet_Nhibernate_AspNetMvc.html">7.&nbsp;Spring.NET学习笔记19——整合NHibernate和ASP.NET MVC(基础篇) Level 300</a></li>
		
			
	
			<li><a id="SingleColumn1_ctl06_RecentPostsList_ctl03_RecentPostsList2_ctl00_Hyperlink1" href="http://www.cnblogs.com/GoodHelper/archive/2009/11/18/SpringNet_NHibernate.html">8.&nbsp;Spring.NET学习笔记18——整合NHibernate(基础篇) Level 300</a></li>
		
			
	
			<li><a id="SingleColumn1_ctl06_RecentPostsList_ctl04_RecentPostsList2_ctl00_Hyperlink1" href="http://www.cnblogs.com/GoodHelper/archive/2009/11/17/SpringNet_Transaction_Required.html">9.&nbsp;Spring.NET学习笔记17——事务传播行为(基础篇) Level 200</a></li>
		
			
	
			<li><a id="SingleColumn1_ctl06_RecentPostsList_ctl05_RecentPostsList2_ctl00_Hyperlink1" href="http://www.cnblogs.com/GoodHelper/archive/2009/11/16/SpringNet_Transaction.html">10.&nbsp;Spring.NET学习笔记16——事务管理(应用篇) Level 200</a></li>
		
		
</ul>
</div>

<div class="catListComment">
<h3 class="catListTitle">最新评论<a id="SingleColumn1__1c5f994_RSSHyperlink1" title="RSS订阅最最新评论" href="http://www.cnblogs.com/GoodHelper/CommentsRSS.aspx"><img title="RSS订阅最最新评论" src="xml.gif" style="border-width: 0px;"></a></h3>

	
			<div class="divRecentCommentAticle">
				<a id="SingleColumn1__1c5f994_CommentList_ctl00_Hyperlink2" class="listitem" href="http://www.cnblogs.com/GoodHelper/archive/2009/11/16/SpringNet_Transaction.html#1746723">1.&nbsp;Re:Spring.NET学习笔记16——事务管理(应用篇) Level 200</a>
			</div>
			<div class="divRecentComment">
				这么好的文章为啥没人评论呢？
一直看楼主的这一系列文章，写的很好，对我有很大帮助。
再次感谢楼主，希望能多出好文章。 (轻风随风)
			</div>		
		
			<div class="divRecentCommentAticle">
				<a id="SingleColumn1__1c5f994_CommentList_ctl01_Hyperlink2" class="listitem" href="http://www.cnblogs.com/GoodHelper/archive/2009/11/19/SpringNet_Nhibernate_AspNetMvc.html#1746697">2.&nbsp;Re:Spring.NET学习笔记19——整合NHibernate和ASP.NET MVC(基础篇) Level 300</a>
			</div>
			<div class="divRecentComment">
				今天带给大家的就是期待以久的ASP.NET MVC与Spring.NET和NHibernate的组合，视图打造.NET版的SSH(Spring-Struts-Hibernate)

很好很强大！ (shmilgmy)
			</div>		
		
			<div class="divRecentCommentAticle">
				<a id="SingleColumn1__1c5f994_CommentList_ctl02_Hyperlink2" class="listitem" href="http://www.cnblogs.com/GoodHelper/archive/2009/11/21/SpringNet_blogs.html#1746691">3.&nbsp;Re:Spring.NET学习笔记——前言</a>
			</div>
			<div class="divRecentComment">
				支持！期待lz王者归来:) (shmilgmy)
			</div>		
		
			<div class="divRecentCommentAticle">
				<a id="SingleColumn1__1c5f994_CommentList_ctl03_Hyperlink2" class="listitem" href="http://www.cnblogs.com/GoodHelper/archive/2009/11/11/SpringNet_Life.html#1741365">4.&nbsp;Re:Spring.NET学习笔记11——自定义对象行为(基础篇) Level 200</a>
			</div>
			<div class="divRecentComment">
				有点迷糊了，第二部分没看明白。
莫非只是“配置”上的继承，仅是为了简化配置的编写？ (鹤冲天)
			</div>		
		
			<div class="divRecentCommentAticle">
				<a id="SingleColumn1__1c5f994_CommentList_ctl04_Hyperlink2" class="listitem" href="http://www.cnblogs.com/GoodHelper/archive/2009/11/11/SpringNet_Method.html#1741362">5.&nbsp;Re:Spring.NET学习笔记10——方法的注入(基础篇) Level 200</a>
			</div>
			<div class="divRecentComment">
				不可思议，没想到.Net也能这样用！ (鹤冲天)
			</div>		
		
</div>

<div class="catListView">
<h3 class="catListTitle">阅读排行榜</h3>
	
			<ul>
		
			<li>
				<a id="SingleColumn1_ctl08_TopList_ctl01_Hyperlink1" href="http://www.cnblogs.com/GoodHelper/archive/2009/11/10/SpringNET_Framework_Step1.html">1.&nbsp;Spring.NET企业架构实践之 JQuery +  FlexiGrid + ASP.NET MVC + NVelocity + WCF + LINQ + NHibernate 综合应用(4064)</a>
			</li>
		
			<li>
				<a id="SingleColumn1_ctl08_TopList_ctl02_Hyperlink1" href="http://www.cnblogs.com/GoodHelper/archive/2009/10/25/Spring_NET_IoC.html">2.&nbsp;Spring.NET学习笔记1——控制反转(基础篇) Level 200(3088)</a>
			</li>
		
			<li>
				<a id="SingleColumn1_ctl08_TopList_ctl03_Hyperlink1" href="http://www.cnblogs.com/GoodHelper/archive/2009/10/16/linq2nhibernate.html">3.&nbsp;10分钟搞定Linq to NHibernate(一)——环境篇(2869)</a>
			</li>
		
			<li>
				<a id="SingleColumn1_ctl08_TopList_ctl04_Hyperlink1" href="http://www.cnblogs.com/GoodHelper/archive/2009/10/25/SpringNET_Config.html">4.&nbsp;Spring.NET学习笔记2——环境搭建(基础篇) Level 200(2468)</a>
			</li>
		
			<li>
				<a id="SingleColumn1_ctl08_TopList_ctl05_Hyperlink1" href="http://www.cnblogs.com/GoodHelper/archive/2009/10/25/SpringNET_Create.html">5.&nbsp;Spring.NET学习笔记4——对象的创建(基础篇) Level 200(1948)</a>
			</li>
		
			</ul>
		
</div>

<div class="catListFeedback">
<h3 class="catListTitle">评论排行榜</h3>
	
			<ul>
		
			<li>
				<a id="SingleColumn1_ctl09_TopList_ctl01_Hyperlink1" href="http://www.cnblogs.com/GoodHelper/archive/2009/11/10/SpringNET_Framework_Step1.html">1.&nbsp;Spring.NET企业架构实践之 JQuery +  FlexiGrid + ASP.NET MVC + NVelocity + WCF + LINQ + NHibernate 综合应用(29)</a>
			</li>
		
			<li>
				<a id="SingleColumn1_ctl09_TopList_ctl02_Hyperlink1" href="http://www.cnblogs.com/GoodHelper/archive/2009/10/16/linq2nhibernate.html">2.&nbsp;10分钟搞定Linq to NHibernate(一)——环境篇(28)</a>
			</li>
		
			<li>
				<a id="SingleColumn1_ctl09_TopList_ctl03_Hyperlink1" href="http://www.cnblogs.com/GoodHelper/archive/2009/10/25/Spring_NET_IoC.html">3.&nbsp;Spring.NET学习笔记1——控制反转(基础篇) Level 200(22)</a>
			</li>
		
			<li>
				<a id="SingleColumn1_ctl09_TopList_ctl04_Hyperlink1" href="http://www.cnblogs.com/GoodHelper/archive/2009/10/25/SpringNET_Create.html">4.&nbsp;Spring.NET学习笔记4——对象的创建(基础篇) Level 200(19)</a>
			</li>
		
			<li>
				<a id="SingleColumn1_ctl09_TopList_ctl05_Hyperlink1" href="http://www.cnblogs.com/GoodHelper/archive/2009/10/26/SpringNET_DI.html">5.&nbsp;Spring.NET学习笔记6——依赖注入(应用篇) Level 300(17)</a>
			</li>
		
			</ul>
		
</div>

			</div>
			
		</div><!--end: sideBarMain -->
	</div><!--end: sideBar 侧边栏容器 -->
	<div class="clear"></div>
	</div><!--end: main -->
	<div class="clear"></div>
	<div id="footer">
		
<!--done-->
Copyright ©2010 刘冬.NET
	</div><!--end: footer -->
</div><!--end: home 自定义的最大容器 --><a href="http://www.cnzz.com/stat/website.php?web_id=1738003" target="_top" title="站长统计"><img src="pic1.gif" border="0" hspace="0" vspace="0"></a><img src="stat.htm" border="0" height="0" width="0">

    </form>
	
	
      
    
    
    
</body>
</html>
